const vm = require('vm');
const context = { x: 2 };
vm.createContext(context);

const script = new vm.Script(
  `for(let i = 0; i < 10000000; i++) x += 1;`,
  { filename: 'tom.js' }
);

const ts = Date.now();
process.on('SIGINT', () => console.log(x));
script.runInContext(context, { breakOnSigint: true });
console.log(Date.now() - ts); // 执行完估计要 3s 以上

// breakOnSigint 解释起来比较啰嗦…
// 如果为 true，script 被 SIGINT(ctrl+c)中断执行时，会抛出一个错误
// 如果为 false，script 被 SIGINT 中断时，会继续执行，可以用 process.on('SIGINT', callback) 来观察